package com.ttbj.core.response;
 
import java.io.Serializable;

import com.ttbj.core.response.enums.ResponseCodeEnums;

/**
 * 接口响应返回对象模型
 * 
 * @author Daniel
 * @date 2016年7月29日 下午6:13:27
 * 
 * @param <T>
 *            引入的泛型
 */
public class ResponseModel<T> implements Serializable {

	private static final long serialVersionUID = 7995555758410641946L;
	/** 返回状态：1-成功；0-失败；-1-异常 */
	protected Integer status;
	/** 返回码 */
	protected String code;
	/** 返回信息说明 */
	protected String msg;
	/** 返回的Body */
	protected T body;

	/** 返回校验码 */
	protected String cVal;

	/**
	 * ResponseModel<T> 默认构造函数
	 * <p>
	 * 默认响应结果为ResponseCodeEnums.SUCCESS成功
	 */
	public ResponseModel() {
		this.setResponse(ResponseCodeEnums.SUCCESS);
	}

	/**
	 * ResponseModel<T> 构造函数
	 */
	public ResponseModel(ResponseCodeEnums responseCodeEnums, T body) {
		this.setResponse(responseCodeEnums);
		this.setBody(body);
	}

	/**
	 * 使用枚举类，设置接口返回信息
	 * 
	 * @author Daniel
	 * @date 2016年7月29日 下午6:13:05
	 * 
	 * @param responseCodeEnums
	 */
	public void setResponse(ResponseCodeEnums responseCodeEnums) {
		this.status = responseCodeEnums.getStatus();
		this.code = responseCodeEnums.getResultCode();
		this.msg = responseCodeEnums.getResultDesc();
	}

	/**
	 * 使用Model，设置接口返回信息
	 * 
	 * @author Daniel
	 * @date 2016年7月29日 下午6:13:16
	 * 
	 * @param responseModel
	 */
	public void setResponse(ResponseModel<?> responseModel) {
		this.status = responseModel.getStatus();
		this.code = responseModel.getCode();
		this.msg = responseModel.getMsg();
	}

	public Integer getStatus() {
		return status;
	}

	public void setStatus(Integer status) {
		this.status = status;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public String getcVal() {
		return cVal;
	}

	public void setcVal(String cVal) {
		this.cVal = cVal;
	}

	public T getBody() {
		return body;
	}

	public void setBody(T body) {
		this.body = body;
		/** TODO */
		// StringBuffer sb = new StringBuffer();
		// sb.append(Md5Util.getMD5Lower(JacksonUtil.doJackson(body)));
		// sb.append(".");
		// sb.append(BlGlobalVariable.KEY_CODE);
		// cVal = Md5Util.getMD5Lower(sb.toString());
	}

}
